import axios from "axios";
import {ElMessage} from "element-plus";
import router from "@/router/index.js";
import {LoginStore} from "../stores";

const BASE_URL = 'http://127.0.0.1:8000/' // 后端地址
const store = LoginStore()
const service = axios.create({
    baseURL: BASE_URL,
    timeout: 10000,   // 10秒
    headers: {
        'Content-Type': 'application/json',
    } // 配置请求头
})


// 添加请求拦截器
service.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    const token = store.$state.access_token
    if (token) {
        config.headers.Authorization = 'Bearer ' + token
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    console.log('请求拦截器：', error)
    return Promise.reject(error);
});

// 添加响应拦截器
service.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    console.log('响应拦截器：', response)

    const code = response.status
    console.log(code)
    if (code >= 200 && code <= 300) {
        if (response.data.code >= 2000 && response.data.code <= 3000) {
            if (response.data.msg) {
                ElMessage.success(
                    {
                        showClose: true,
                        message: response.data.msg,
                        duration: 2000,
                        center: true
                    }
                )
            }
            return response;
        } else {
            ElMessage.error(
                {
                    showClose: true,
                    message: response.data.msg,
                    duration: 2000,
                    center: true
                }
            )
            return false
        }
    } else {
        return Promise.reject('backend error')
    }

}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    console.log('响应拦截器错误提示：', error.response)
    try {
        const code = error.response.status
        console.log(code)
    } catch (e) {
        if (error.toString().indexOf('Error:timeout') !== -1) {
            ElMessage.error(
                {
                    message: "网络请求超时",
                    duration: 2000
                }
            )
            return Promise.reject(error)
        }
    }
    if (code) {
        if (code === 401 && error.response.data.code === 'token_not_valid') {
            ElMessageBox.confirm(
                '登录状态已过期，您可以继续留在该页面，或者登录退出',
                '系统提示',
                {
                    confirmButtonText: '重新登录',
                    cancelButtonText: '取消',
                    type: 'warning',
                }
            ).then(() => {
                router.dispatch('login').then(() => {
                    location.reload();//为了重新实例化vue-router对象
                })
            })
        } else if (code == 405) {
            router.push({path: '/401'})
        } else {
            const ErrorMsg = error.response.data.message
            if (ErrorMsg != undefined) {
                ElMessage.error({
                    message: ErrorMsg,
                    duration: 3000
                })
            }
        }
    } else {
        ElMessage.error({
            message: '接口请求失败',
            duration: 3000
        })
    }
    return Promise.reject(error);
});

//4.导入文件
export default service